package java_thinking.unit_16;

import java_thinking.net.mindview.util.Generated;

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

/**
 * @Desc:   假设有人给你一个并没有实现Comparable的类，或者给你的类实现了Comparable，但是你不喜欢它的实现方式，
 *          你需要另一种不同的比较方法，要解决这个问题，可以 创建一个实现了Comparator接口，的单独类，
 *          这是策略设计模式的一个应用实例
 * @author: cww
 * @DateTime: 2019/4/10 8:56
 */

public class _7_3_2Reverse {
    public static void main(String[] args) {
        _7_3_1CompType[] a = Generated.array(new _7_3_1CompType[12],_7_3_1CompType.generator());
        System.out.println("before");
        System.out.println(Arrays.toString(a));
        Arrays.sort(a, Collections.reverseOrder());
        System.out.println("after");
        System.out.println(Arrays.toString(a));

        _7_3_1CompType[] a1 = Generated.array(new _7_3_1CompType[12],_7_3_1CompType.generator());
        System.out.println("before");
        System.out.println(Arrays.toString(a1));
        Arrays.sort(a1, new ComTypeComparator());
        System.out.println("after");
        System.out.println(Arrays.toString(a1));
    }
}

/**
 * 也可以自己编写一个Comparator，在这里CompType对象是基于j值，而不是基于i值
 */
class ComTypeComparator implements Comparator<_7_3_1CompType> {


    @Override
    public int compare(_7_3_1CompType o1, _7_3_1CompType o2) {
        return (o1.j < o2.j ? -1 : (o1.j == o2.j ? 0 : 1));
    }
}

class ComparatorTest {
    public static void main(String[] args) {

    }
}